時間過得很快又到了一年一度的 IT 鐵人賽,這次是我連續第4年參加 IT 鐵人賽。寫文章主要的目的是想整理和分享,用過或是學過的技術。另外如果指令忘記的時侯也可以直接看之前的文章做查詢, 所以可以得到非常多的好處。
這次的鐵人賽我主要會分享 Ohara,相信大部份的人都沒有看過或聽過這個名詞。它是一個 open source 專案,是一個 ETL (Extract Transform Load ) 的工具,Ohara 最大的目標是希望使用者能夠很方便以及快速的把資料從一個來源端寫入到另外一個目的端,另外在寫資料的過程中也可以做資料轉換和過濾(filter),例如是把英文小寫的字串轉換成大寫的字串或是只希望某些條件的資料被寫入到目的的檔案系統。
下圖是使用 ohara 建立一個 pipeline 的簡單範例:
從上圖左邊的 myFtpSource 是一支程式會連接到 Ftp server 並把資料寫入到 myTopic 裡,之後 myFtpSink程式會收到 myTopic 裡的資料然後寫入到另外一個 Ftp Server 裡,所以資料流是使用 Producer/Consumer 的架構。中間透過 myTopic 主要的好處如下:
1.如果 myFtpSink 的程式當掉,不會影響到 myFtpSource 程式的運作,一樣可以把資料寫入到 myTopic 裡,等到 myFtpSink 程式修好之後,就可以繼續的把資料寫入到目的端的 Ftp server 裡,myTopic 就有點類似郵箱的角色,郵差只要把信投到郵箱去,然後收件人隔某一段時間去收信就可以了,不用互相等待。
2.如果有另外一個需求是需要把資料寫入到其它檔案系統裡,例如是 HDFS Storage, myFtpSource 也不用另外的再去傳資料,直接再建立另外一個 myHDFSSink 程式就可以直接到 myTopic 取得資料,並且把資料寫入到 HDFS 裡。
以上是簡單的介紹 ohara 如何做到 ETL (Extract Transform Load) 系統的概念,在未來的 30 天裡還會做更進一步的介紹,目前規劃會在這 30 天裡介紹的大方向如下:
最後如果對 Ohara 有興趣可以到 github 裡去按星星, 或是對系統有任何想法或發現有bug 都可以發 issue,連結如下:
https://github.com/oharastream/ohara
讓我們一起來學習 open source 的軟體開發吧!